/*
 * commons is a based project implemented
 * Copyright (C) 2024 Jasmine
 */
package com.commons.log.enums;

import java.util.Collections;
import java.util.LinkedHashSet;
import java.util.Set;

/**
 * 日志包含信息
 * 
 * @author Jasmine
 * @version 1.0
 * @description
 * @see Include
 * @since 2024-01-29 10:50:50
 */
public enum Include {
    /**
     * 模块
     */
    MODULE,

    /**
     * 描述
     */
    DESC,

    /**
     * 请求头
     */
    REQUEST_HEADERS,

    /**
     * 请求体（如包含请求体/请求参数）
     */
    REQUEST_PARAMS,
    /**
     * IP 归属地
     */
    IP_ADDRESS,

    /** 用户代理 ,客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等 */
    USER_AGENT,

    /**
     * 响应头（默认）
     */
    RESPONSE_HEADERS,

    /**
     * 响应体（如包含响应体，则响应参数无效）
     */
    RESPONSE_PARAMS,;

    private static final Set<Include> DEFAULT_INCLUDES;

    static {
        Set<Include> defaultIncludes = new LinkedHashSet<>();
        defaultIncludes.add(Include.MODULE);
        defaultIncludes.add(Include.DESC);
        defaultIncludes.add(Include.REQUEST_HEADERS);
        defaultIncludes.add(Include.REQUEST_PARAMS);
        defaultIncludes.add(Include.IP_ADDRESS);
        defaultIncludes.add(Include.USER_AGENT);
        defaultIncludes.add(Include.RESPONSE_PARAMS);
        DEFAULT_INCLUDES = Collections.unmodifiableSet(defaultIncludes);
    }

    /**
     * 获取默认包含信息
     *
     * @return 默认包含信息
     */
    public static Set<Include> defaultIncludes() {
        return DEFAULT_INCLUDES;
    }
}